package beans;

import java.util.ArrayList;
import java.util.List;

import javax.naming.NamingException;

import org.richfaces.component.html.HtmlDataTable;

import co.edu.uniquindio.ondas.delegados.EvaluadorDelegado;
import co.edu.uniquindio.ondas.dtos.ResumenEvaluacionDTO;
import co.edu.uniquindio.ondas.entidades.Bitacora1Maestro;
import co.edu.uniquindio.ondas.entidades.Bitacora2;
import co.edu.uniquindio.ondas.entidades.Bitacora2Maestro;
import co.edu.uniquindio.ondas.entidades.Bitacora3;
import co.edu.uniquindio.ondas.entidades.Bitacora3Maestro;
import co.edu.uniquindio.ondas.entidades.EvaluacionProyectos;
import co.edu.uniquindio.ondas.entidades.Evaluador;

/**
 * @author Javier
 * Bean de Sesion para perfil Evaluador
 */
public class EvaluadorBean {

	private EvaluacionProyectos evaluacion=new EvaluacionProyectos();
	
	private boolean autenticado = false;
	private EvaluadorDelegado evaluadorDelegado;
	private Evaluador evaluador = new Evaluador();
	
	private List<ResumenEvaluacionDTO> listaEvaluacion;
	private HtmlDataTable tablaEvaluacion;
	private ResumenEvaluacionDTO evaluacionSeleccionada=new ResumenEvaluacionDTO(0, 0, "", "", "",0);
	
	private Bitacora2 bitacora2=new Bitacora2();
	
	private Bitacora3 bitacora3=new Bitacora3();
	
	private Bitacora2Maestro bitacora2Maestro=new Bitacora2Maestro();
	
	private Bitacora1Maestro bitacora1Maestro=new Bitacora1Maestro();
	
	private Bitacora3Maestro bitacora3Maestro=new Bitacora3Maestro();
	
	private List<Integer> calificacion;
	
	private long numeroEstudiantes;
	
	private long numeroMaestros;


	/**
	 *Metodo constructor
	 */
	public EvaluadorBean() {
		calificacion=new ArrayList<Integer>();
		
		for (int i = 1; i < 11; i++) {
			calificacion.add(i);
		}
	}
	
	/**
	 * Metodo que permite inciar la cuenta de un Evaluador
	 * @return
	 * @throws NamingException
	 */
	public String iniciarSesion() throws NamingException {

		evaluadorDelegado = new EvaluadorDelegado();
		
		autenticado = evaluadorDelegado.inicioSesionEvaluador(
				evaluador.getIdentificacion(), evaluador.getClave());

		return "";
	}
	
		
	/**
	 * Metodo que permite cerrar la sesion de un evaluador
	 * @return
	 */
	public String cerrarSesion() {
		autenticado = false;
		return "";

	}
	
	/**
	 * Merodo que permite modificar un Evaluador
	 * @return
	 */
	public String modificarEvaluador()
	{
	   evaluadorDelegado.modificarEvaluador(evaluador);	
		
		return "";
		
	}
	
	/**
	 * Metodo que permite obtener la lista de invetigaciones a ser evaluadas
	 * @return
	 */
	public String obtenerListaEvaluacion()
	{
		listaEvaluacion=evaluadorDelegado.obtenerResumenEvaluacion(evaluador.getIdentificacion());
		
		
		return "proyectoEvaluar";
	}
	
	/**
	 * Metodo que permite desde interfaz seleccionar una evaluacion
	 * @return
	 */
	public String obtenerSeleccion()
	{
		evaluacionSeleccionada=(ResumenEvaluacionDTO) getTablaEvaluacion().getRowData();
//		JOptionPane.showMessageDialog(null, evaluacionSeleccionada.getIdEvaluacion()+"  "+evaluacionSeleccionada.getNombreGrupo());
		
		long idInvestigacion=evaluacionSeleccionada.getIdInvestigacion();
		bitacora2=evaluadorDelegado.getBitacora2(idInvestigacion);
		bitacora3=evaluadorDelegado.getBitacora3(idInvestigacion);
		bitacora2Maestro=evaluadorDelegado.getBitacora2Maestro(idInvestigacion);
		bitacora1Maestro=evaluadorDelegado.getBitacora1Maestro(idInvestigacion);
		bitacora3Maestro=evaluadorDelegado.getBitacora3Maestro(idInvestigacion);
		numeroEstudiantes=evaluadorDelegado.obtenerNumeroEstudiantesGrupo(evaluacionSeleccionada.getIdGrupo());
		numeroMaestros=evaluadorDelegado.obtenerNumeroMaestrosGrupo(evaluacionSeleccionada.getIdGrupo());
		
		return "evaluacionProyectos";
	}
	
	/**
	 * Metodo que permite asignar una Investigacion a un Evaluadr
	 * @return
	 */
	public String asignarEvaluacion()
	{
		evaluadorDelegado.evaluarInvestigacion(evaluacion, evaluacionSeleccionada.getIdInvestigacion(), evaluacionSeleccionada.getIdEvaluacion(), evaluador.getIdentificacion());
		
		return obtenerListaEvaluacion();
	}

	/**
	 *Metodo accesor del atributo evaluacion
	 * @return the evaluacion
	 */
	public EvaluacionProyectos getEvaluacion() {
		return evaluacion;
	}

	/**
	 *Metodo Modificador del atributo evaluacion
	 * @param evaluacion the evaluacion to set
	 */
	public void setEvaluacion(EvaluacionProyectos evaluacion) {
		this.evaluacion = evaluacion;
	}

	/**
	 *Metodo accesor del atributo autenticado
	 * @return the autenticado
	 */
	public boolean isAutenticado() {
		return autenticado;
	}

	/**
	 *Metodo Modificador del atributo autenticado
	 * @param autenticado the autenticado to set
	 */
	public void setAutenticado(boolean autenticado) {
		this.autenticado = autenticado;
	}

	/**
	 *Metodo accesor del atributo evaluadorDelegado
	 * @return the evaluadorDelegado
	 */
	public EvaluadorDelegado getEvaluadorDelegado() {
		return evaluadorDelegado;
	}

	/**
	 *Metodo Modificador del atributo evaluadorDelegado
	 * @param evaluadorDelegado the evaluadorDelegado to set
	 */
	public void setEvaluadorDelegado(EvaluadorDelegado evaluadorDelegado) {
		this.evaluadorDelegado = evaluadorDelegado;
	}

	/**
	 *Metodo accesor del atributo evaluador
	 * @return the evaluador
	 */
	public Evaluador getEvaluador() {
		return evaluador;
	}

	/**
	 *Metodo Modificador del atributo evaluador
	 * @param evaluador the evaluador to set
	 */
	public void setEvaluador(Evaluador evaluador) {
		this.evaluador = evaluador;
	}

	/**
	 *Metodo accesor del atributo listaEvaluacion
	 * @return the listaEvaluacion
	 */
	public List<ResumenEvaluacionDTO> getListaEvaluacion() {
		return listaEvaluacion;
	}

	/**
	 *Metodo Modificador del atributo listaEvaluacion
	 * @param listaEvaluacion the listaEvaluacion to set
	 */
	public void setListaEvaluacion(List<ResumenEvaluacionDTO> listaEvaluacion) {
		this.listaEvaluacion = listaEvaluacion;
	}

	/**
	 *Metodo accesor del atributo tablaEvaluacion
	 * @return the tablaEvaluacion
	 */
	public HtmlDataTable getTablaEvaluacion() {
		return tablaEvaluacion;
	}

	/**
	 *Metodo Modificador del atributo tablaEvaluacion
	 * @param tablaEvaluacion the tablaEvaluacion to set
	 */
	public void setTablaEvaluacion(HtmlDataTable tablaEvaluacion) {
		this.tablaEvaluacion = tablaEvaluacion;
	}

	/**
	 *Metodo accesor del atributo evaluacionSeleccionada
	 * @return the evaluacionSeleccionada
	 */
	public ResumenEvaluacionDTO getEvaluacionSeleccionada() {
		return evaluacionSeleccionada;
	}

	/**
	 *Metodo Modificador del atributo evaluacionSeleccionada
	 * @param evaluacionSeleccionada the evaluacionSeleccionada to set
	 */
	public void setEvaluacionSeleccionada(
			ResumenEvaluacionDTO evaluacionSeleccionada) {
		this.evaluacionSeleccionada = evaluacionSeleccionada;
	}

	/**
	 *Metodo accesor del atributo bitacora2
	 * @return the bitacora2
	 */
	public Bitacora2 getBitacora2() {
		return bitacora2;
	}

	/**
	 *Metodo Modificador del atributo bitacora2
	 * @param bitacora2 the bitacora2 to set
	 */
	public void setBitacora2(Bitacora2 bitacora2) {
		this.bitacora2 = bitacora2;
	}

	/**
	 *Metodo accesor del atributo bitacora3
	 * @return the bitacora3
	 */
	public Bitacora3 getBitacora3() {
		return bitacora3;
	}

	/**
	 *Metodo Modificador del atributo bitacora3
	 * @param bitacora3 the bitacora3 to set
	 */
	public void setBitacora3(Bitacora3 bitacora3) {
		this.bitacora3 = bitacora3;
	}

	/**
	 *Metodo accesor del atributo bitacora2Maestro
	 * @return the bitacora2Maestro
	 */
	public Bitacora2Maestro getBitacora2Maestro() {
		return bitacora2Maestro;
	}

	/**
	 *Metodo Modificador del atributo bitacora2Maestro
	 * @param bitacora2Maestro the bitacora2Maestro to set
	 */
	public void setBitacora2Maestro(Bitacora2Maestro bitacora2Maestro) {
		this.bitacora2Maestro = bitacora2Maestro;
	}

	/**
	 *Metodo accesor del atributo bitacora1Maestro
	 * @return the bitacora1Maestro
	 */
	public Bitacora1Maestro getBitacora1Maestro() {
		return bitacora1Maestro;
	}

	/**
	 *Metodo Modificador del atributo bitacora1Maestro
	 * @param bitacora1Maestro the bitacora1Maestro to set
	 */
	public void setBitacora1Maestro(Bitacora1Maestro bitacora1Maestro) {
		this.bitacora1Maestro = bitacora1Maestro;
	}

	/**
	 *Metodo accesor del atributo bitacora3Maestro
	 * @return the bitacora3Maestro
	 */
	public Bitacora3Maestro getBitacora3Maestro() {
		return bitacora3Maestro;
	}

	/**
	 *Metodo Modificador del atributo bitacora3Maestro
	 * @param bitacora3Maestro the bitacora3Maestro to set
	 */
	public void setBitacora3Maestro(Bitacora3Maestro bitacora3Maestro) {
		this.bitacora3Maestro = bitacora3Maestro;
	}

	/**
	 *Metodo accesor del atributo calificacion
	 * @return the calificacion
	 */
	public List<Integer> getCalificacion() {
		return calificacion;
	}

	/**
	 *Metodo Modificador del atributo calificacion
	 * @param calificacion the calificacion to set
	 */
	public void setCalificacion(List<Integer> calificacion) {
		this.calificacion = calificacion;
	}

	/**
	 *Metodo accesor del atributo numeroEstudiantes
	 * @return the numeroEstudiantes
	 */
	public long getNumeroEstudiantes() {
		return numeroEstudiantes;
	}

	/**
	 *Metodo Modificador del atributo numeroEstudiantes
	 * @param numeroEstudiantes the numeroEstudiantes to set
	 */
	public void setNumeroEstudiantes(long numeroEstudiantes) {
		this.numeroEstudiantes = numeroEstudiantes;
	}

	/**
	 *Metodo accesor del atributo numeroMaestros
	 * @return the numeroMaestros
	 */
	public long getNumeroMaestros() {
		return numeroMaestros;
	}

	/**
	 *Metodo Modificador del atributo numeroMaestros
	 * @param numeroMaestros the numeroMaestros to set
	 */
	public void setNumeroMaestros(long numeroMaestros) {
		this.numeroMaestros = numeroMaestros;
	}

	
}
